﻿#region Copyright and License Notice
// Copyright (C)2010-2016 - Rob Levine and other contributors
// http://configgen.codeplex.com
// 
// This file is part of ConfigGen.
// 
// ConfigGen is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// ConfigGen is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License and 
// the GNU Lesser General Public License along with ConfigGen.  
// If not, see <http://www.gnu.org/licenses/>
#endregion

using System;

namespace ConfigGen.ConsoleApp.Core.CommandLineOptionCore
{
    /// <summary>
    /// This exception is thrown by a <see cref="CommandLineOptionFactory{T}"/> instance if an attempt
    /// to get a handler instance from the factory with a name that is not recognised.
    /// </summary>
    public class UnrecognisedCommandLineOptionException : Exception
    {
        private readonly string _shortName;
        private readonly string _longName;

        /// <summary>
        /// Initializes a new instance of the <see cref="UnrecognisedCommandLineOptionException"/> class.
        /// </summary>
        /// <param name="message">The exception message.</param>
        /// <param name="shortName">The short name for which the request failed, or null if it was a long name request that failed.</param>
        /// <param name="longName">The long name for which the request failed, or null if it was a short name request that failed.</param>
        public UnrecognisedCommandLineOptionException(string message, string shortName , string longName)
            : base (message)
        {
            _shortName = shortName;
            _longName = longName;
        }

        /// <summary>
        /// Gets the long name for which the request failed, or null if it was a short name request that failed.
        /// </summary>
        public string LongName
        {
            get { return _longName; }
        }

        /// <summary>
        /// Gets the short name for which the request failed, or null if it was a long name request that failed.
        /// </summary>
        public string ShortName
        {
            get { return _shortName; }
        }
    }
}